/** 存储
 * @ 作  者: 阿拉丁矿工 黄传鸿 <hchhyzc@foxmail.com>
 */


/** 坐标类型 */
export interface CoordinateType {
    x: number
    y: number
}

/** 几何类型 */
export interface GeometryType {
    /*位置*/
    place: CoordinateType,
    /*宽度*/
    width: number,
    /*高度*/
    height: number,
    /*缩放*/
    scale: number;
    /*旋转*/
    rotate: number;
    /*平移*/
    translate: CoordinateType,

}

/** 图元数据类型*/
export interface pelDataType {
    /*几何参数*/
    geometry: GeometryType,
    // 图元名称
    label: string,
    // 图元id
    key: string,
    // 图元类型
    type: string,
    // 图元分类
    category: string,
    // 父键
    parentKey: string,
    // 子属性
    childrenKey?: any[],
    // 属性
    attrs: object,
    // 动画
    animations: object,
    // 事件
    events: object,
}

/** 画布属性类型 */
export interface canvasAttrType {
    /** 页面名称 */
    pageName: string,
    /** 页面键 */
    pageKey: string,
    /** 页面尺寸 */
    pageSize: string,
    /** 页面方向 */
    pageOrientation: string,
    /** 页面精度 */
    pageAccuracy: string,
    /** 页面单位 */
    pageUnit: string,

    // 🦢 画布
    /** 画布缩放 */
    canvasScale: number,
    /** 画布背景色 */
    canvasBackColor: string,
    /** 画布宽度 */
    canvasWidth: number,
    /** 画布高度 */
    canvasHeight: number,
    // 🦢 格栅
    /** 格栅模式选项:1-无格栅;2-点格栅;3-方格; */
    gridModel: number,
    /** 格栅样式选项:1-像素尺寸;2-均分画布;3-按宽高均分画布;*/
    gridStyle: number,
    /** 格栅间距 */
    gridSpace: number,
    /** 宽等分数 */
    gridBisectionWidthCont: number,
    /** 宽等分数 */
    gridBisectionHeightCont: number,
    /** 格栅点颜色 */
    gridDotColor: string,
    /** 小格颜色 */
    gridColorMini: string,
    /** 大格颜色 */
    gridColorMax: string,
    /** 格栅宽度 */
    gridWidth: number,
    /** 格栅高度 */
    gridHeight: number,

    // 🦢 光标
    /** 显示光标 */
    isShowCursor: boolean,
    /** 光标颜色 */
    cursorColor: string,
    /** 光标盒子尺寸 */
    cursorBoxSize: number,
    /** 光标长度 */
    cursorLang: number,
    /** 光标线宽度 */
    cursorLineWidth: number,

    // 🦢 标尺
    ruleLineColor: string
}

/** 页面类型 */
export interface pageType {
    // 图元名称
    label: string,
    // 图元id
    key: string,
    // 图元类型
    canvasAttr: canvasAttrType,
    // 子属性
    pelSet: any[],
}

/** 笔类型 */
export interface penType {
    label: string,
    key: string,
    stroke: string,
    stroke_width: number,
    stroke_dasharray: number,
    stroke_dashoffset: number,
    stroke_linecap: string,
    fill: string,
    opacity: number,
    fill_opacity: number,
    stroke_opacity: number,
    fx: number,
    fy: number
}

/** 笔筒类型 */
export interface penContainerType {
    label: string,
    key: string,
    type: string,
    children?: penType[]
}

/** 块类型 */
export interface blockType {
    label: string,
    key: string,
    type: string,
    val: string
}

/** 块组类型 */
export interface blockGroupType {
    label: string,
    key: string,
    type: string,
    children?: blockType[]
}

/** 画布类型 */
export interface canvasStoreType {

    /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
    // 🐸 页面
    /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
    /** 画布属性 */
    canvasAttr: canvasAttrType,
    /** 复制页面参数 */
    copyPageInfo: object,
    /** 复制页面参数 */
    copyCanvasInfo: object,

    /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
    // 🐸 笔筒
    /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
    /** 笔筒 */
    penContainer: penContainerType[],
    /** 选择的笔筒 */
    selectedPenContainer: penContainerType,
    /** 选中的画笔 */
    selectedPen: penType,
    /** 笔选择状态-0无-1笔筒-2笔-3已下载-4上载 */
    penSelectState: number,
    /** 复制笔 */
    copyPen: penType,

    /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
    // 🐸 块组
    /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
    /** 块组*/
    blockGroup: blockGroupType,
    /** 选择的块组 */
    selectedBlockGroup: blockGroupType,
    /** 选中的 */
    selectedBlock: blockType,
    /** 复制块 */
    copyBlock: blockType,

    /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
    // 🐸 坐标
    /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
    /** 坐标 */
    coordinate: CoordinateType,
    /** 记录点 */
    recordPoint: CoordinateType[],
    /** 移动坐标 */
    moveCoordinate: CoordinateType,
    /** 移动画布记录*/
    moveCanvasRecord: [],
    /** 画布移动X */
    moveOffsetX: number,
    /** 画布移动Y */
    moveOffsetY: number,
    /** 卷轴偏移x */
    scrollX: number,
    /** 卷轴偏移y */
    scrollY: number,

    /** 工作状态:
     * 00 无;
     * 10 选择;
     * 11 点选;
     * 12 框选;
     * 13 交叉选;
     * 20 绘图;
     * 30 编辑;
     * 40 移动;
     * 50 复制;
     * 60 画布平移
     * 70 获取平移坐标
     * */
    workState: number,
    /** 绘制图元类型 */
    drawPelType: string,

    /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
    // 🐸 选择
    /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
    /** 选择切换 */
    selectToggle: false,
    /** 选择框 */
    selectRect: {
        /** 选择模式 0_选择未激活 1_选择激活 2_点选 3_框选 4_交叉选 */
        Model: 0,
        /** 矩形基点X */
        BasePointX: 0,
        /** 矩形基点Y */
        BasePointY: 0,
        /** 矩形颜色 */
        StrokeColor: '#00ff00',
        /** 矩形宽度 */
        RectWidth: 0,
        /** 矩形高度 */
        RectHeight: 0,
    },
    /** 选择区域*/
    selectRange: [],

    /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
    // 🐸 记录
    /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
    /** 提示 */
    tips: string,

    /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
    // 🐸 数据输入
    /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
    /** 最小值 */
    sliderMin: number,
    /** 最大值 */
    sliderMax: number,
    /** 步距值 */
    sliderStep: number,
}

/** 布局类型 */
export interface layoutStoreType {
    // 名称
    label: string,
    // id
    key: string,
}
